package br.com.rentalcar.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.rentalcar.domain.Categoria;
import br.com.rentalcar.factory.ConexaoFactory;

public class CategoriaDao {

	public void salvar(Categoria categoria) throws SQLException {

		Connection conn = ConexaoFactory.conectar();

		String sql = "INSERT INTO Categoria(descricao, precoDiario, precoSemanal, precoMensal, quantidadeCarros)"
				+ "VALUES(?, ?, ?, ?, ?)";

		PreparedStatement smt = conn.prepareStatement(sql);

		smt.setString(1, categoria.getDescricao());
		smt.setDouble(2, categoria.getPrecoDiario());
		smt.setDouble(3, categoria.getPrecoSemanal());
		smt.setDouble(4, categoria.getPrecoMensal());
		smt.setLong(5, categoria.getQuantidadeCarros());
		smt.executeUpdate();

	}

	public void atualizar(Categoria categoria) throws SQLException {

		Connection conn = ConexaoFactory.conectar();

		String sql = "UPDATE Categoria SET idcategoria = ?, descricao = ?, precoDiario = ?, precoSemanal = ?, precoMensal = ?, quantidadeCarros = ? WHERE idCategoria = ?";

		PreparedStatement smt = conn.prepareStatement(sql);

		smt.setLong(1, categoria.getIdCategoria());
		smt.setString(2, categoria.getDescricao());
		smt.setDouble(3, categoria.getPrecoDiario());
		smt.setDouble(4, categoria.getPrecoSemanal());
		smt.setDouble(5, categoria.getPrecoMensal());
		smt.setInt(6, categoria.getQuantidadeCarros());
		smt.setLong(7, categoria.getIdCategoria());

		smt.executeUpdate();
		smt.close();

	}

	public void excluir(Categoria categoria) throws SQLException {

		Connection conn = ConexaoFactory.conectar();

		String sql = "DELETE FROM Categoria WHERE idCategoria = ?";

		PreparedStatement smt = conn.prepareStatement(sql);

		smt.setLong(1, categoria.getIdCategoria());
		smt.executeUpdate();
		smt.close();

	}

	public List<Categoria> listar() throws SQLException {

		List<Categoria> lista = new ArrayList<Categoria>();

		Connection conn = ConexaoFactory.conectar();

		String sql = "SELECT * FROM Categoria";

		PreparedStatement smt = conn.prepareStatement(sql);

		ResultSet rs = smt.executeQuery();

		Categoria categoria;

		while (rs.next()) {

			Long idCategoria = rs.getLong("idCategoria");
			String descricao = rs.getString("descricao");
			double precoDiario = rs.getDouble("precoDiario");
			double precoSemanal = rs.getDouble("precoSemanal");
			double precoMensal = rs.getDouble("precoMensal");
			int quantidadeCarros = rs.getInt("quantidadeCarros");

			categoria = new Categoria();

			categoria.setIdCategoria(idCategoria);
			categoria.setDescricao(descricao);
			categoria.setPrecoDiario(precoDiario);
			categoria.setPrecoSemanal(precoSemanal);
			categoria.setPrecoMensal(precoMensal);
			categoria.setQuantidadeCarros(quantidadeCarros);

			lista.add(categoria);

		}
		return lista;

	}

	public Categoria recuperarCategoria(Long idCategoria) {

		Categoria categoria = new Categoria();

		try {
			Connection conn = ConexaoFactory.conectar();

			PreparedStatement smt = conn
					.prepareStatement("SELECT idcategoria, descricao, precoDiario, precoSemanal, precoMensal, quantidadeCarros FROM categoria WHERE idCategoria=? ");
			smt.setLong(1, idCategoria);
			ResultSet rs = smt.executeQuery();

			categoria = new Categoria();

			while (rs.next()) {
				categoria.setIdCategoria(rs.getLong(1));
				categoria.setDescricao(rs.getString(2));
				categoria.setPrecoDiario(rs.getLong(3));
				categoria.setPrecoSemanal(rs.getLong(4));
				categoria.setPrecoMensal(rs.getLong(5));
				categoria.setQuantidadeCarros(rs.getInt(6));
			}

		} catch (SQLException e) {
			System.out.println("Erro na consulta " + e.getMessage());
		}
		return categoria;
	}

}
